A. sql无法保存了,
工具-〉选项-〉左侧有个 设计器-〉表设计器和数据库设计器 -> 阻止保存要求重新创建表的更改(右侧) 把钩去掉即可。
B. 我想把sql语句保存到sqlserver2005中,但是有的sql语句不能保存,是不是需要转换格式,要转换成什么格式
是这样的,因为在你的sql语句中会有特殊符号,如单引号,逗号等,这些是不能通过sql语句直接存储的。
解决方案1:将你需要存储的sql语句中的标点符号都使用 中文 标点,这样就可以存储。
解决方案2:如果是西文标点,你就需要对标点符号进行编码存储。不然就会出错。
分析:如你要存储 yes,i can.那么存储语句应该是:
insert into tablename values('yes,ican');
就会提示出错,因为 逗号 将语句隔开了,数据库会认为你插入的是两个字段:
yes和i can,但是如果是yes和i can,那么语句应该是:values('yes','i can');
结论:所以按以上方法肯定不能存储。而在Server命名空间里面有这样一组方法:
HTMLEncode() 和 HTMLDecode() 分别是对这些特殊文本进行编解码的。
所以你在存储“yes,i can” 的时候,对它进行一次“编码”,
string bianma = HTMLEncode(); (HTMLEncode的返回值是什么你自己查下文档)
然后就可以拿bianma来存入数据库即可。
当然在你取出数据之后,就需要对该数据进行解码操作。HTMLDecode();
分析结束,我曾经也在项目过程中遇到过这样的问题,希望能够帮到你。
C. MSSQL中遇到存储过程加密出错不能查看
存储过程解密(破解函数,过程,触发器,视图.仅限于SQLSERVER2000)
--*/
/*--调用示例:
--解密指定存储过程
exec sp_decrypt '存储过程名'
--*/
create PROCEDURE sp_decrypt(@objectName varchar(50))
AS
begin
begin tran
declare @objectname1 varchar(100),@orgvarbin varbinary(8000)
declare @sql1 nvarchar(4000),@sql2 nvarchar(4000),@sql3 nvarchar(4000),@sql4 nvarchar(4000),@sql5 nvarchar(4000),@sql6 nvarchar(4000),@sql7 nvarchar(4000),@sql8 nvarchar(4000),@sql9 nvarchar(4000),@sql10 nvarchar(4000)
DECLARE @OrigSpText1 nvarchar(4000), @OrigSpText2 nvarchar(4000) , @OrigSpText3 nvarchar(4000), @resultsp nvarchar(4000)
declare @i int,@status int,@type varchar(10),@parentid int
declare @colid int,@n int,@q int,@j int,@k int,@encrypted int,@number int
select @type=xtype,@parentid=parent_obj from sysobjects where id=object_id(@ObjectName)
create table #temp(number int,colid int,ctext varbinary(8000),encrypted int,status int)
insert #temp SELECT number,colid,ctext,encrypted,status FROM syscomments WHERE id = object_id(@objectName)
select @number=max(number) from #temp
set @k=0
while @k<=@number
begin
if exists(select 1 from syscomments where id=object_id(@objectname) and number=@k)
begin
if @type='P'
set @sql1=(case when @number>1 then 'ALTER PROCEDURE '+ @objectName +';'+rtrim(@k)+' WITH ENCRYPTION AS '
else 'ALTER PROCEDURE '+ @objectName+' WITH ENCRYPTION AS '
end)
if @type='TR'
set @sql1='ALTER TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION FOR INSERT AS PRINT 1 '
if @type='FN' or @type='TF' or @type='IF'
set @sql1=(case @type when 'TF' then
'ALTER FUNCTION '+ @objectName+'(@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end '
when 'FN' then
'ALTER FUNCTION '+ @objectName+'(@a char(1)) returns char(1) with encryption as begin return @a end'
when 'IF' then
'ALTER FUNCTION '+ @objectName+'(@a char(1)) returns table with encryption as return select @a as a'
end)
if @type='V'
set @sql1='ALTER VIEW '+@objectname+' WITH ENCRYPTION AS SELECT 1 '
set @q=len(@sql1)
set @sql1=@sql1+REPLICATE('-',4000-@q)
select @sql2=REPLICATE('-',4000),@sql3=REPLICATE('-',4000),@sql4=REPLICATE('-',4000),@sql5=REPLICATE('-',4000),@sql6=REPLICATE('-',4000),@sql7=REPLICATE('-',4000),@sql8=REPLICATE('-',4000),@sql9=REPLICATE('-',4000),@sql10=REPLICATE('-',4000)
exec(@sql1+@sql2+@sql3+@sql4+@sql5+@sql6+@sql7+@sql8+@sql9+@sql10)
end
set @k=@k+1
end
set @k=0
while @k<=@number
begin
if exists(select 1 from syscomments where id=object_id(@objectname) and number=@k)
begin
select @colid=max(colid) from #temp where number=@k
set @n=1
while @n<=@colid
begin
select @OrigSpText1=ctext,@encrypted=encrypted,@status=status FROM #temp WHERE colid=@n and number=@k
SET @OrigSpText3=(SELECT ctext FROM syscomments WHERE id=object_id(@objectName) and colid=@n and number=@k)
if @n=1
begin
if @type='P'
SET @OrigSpText2=(case when @number>1 then 'CREATE PROCEDURE '+ @objectName +';'+rtrim(@k)+' WITH ENCRYPTION AS '
else 'CREATE PROCEDURE '+ @objectName +' WITH ENCRYPTION AS '
end)
if @type='FN' or @type='TF' or @type='IF'--刚才有错改一下
SET @OrigSpText2=(case @type when 'TF' then
'CREATE FUNCTION '+ @objectName+'(@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end '
when 'FN' then
'CREATE FUNCTION '+ @objectName+'(@a char(1)) returns char(1) with encryption as begin return @a end'
when 'IF' then
'CREATE FUNCTION '+ @objectName+'(@a char(1)) returns table with encryption as return select @a as a'
end)
if @type='TR'
set @OrigSpText2='CREATE TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION FOR INSERT AS PRINT 1 '
if @type='V'
set @OrigSpText2='CREATE VIEW '+@objectname+' WITH ENCRYPTION AS SELECT 1 '
set @q=4000-len(@OrigSpText2)
set @OrigSpText2=@OrigSpText2+REPLICATE('-',@q)
end
else
begin
SET @OrigSpText2=REPLICATE('-', 4000)
end
--start counter
SET @i=1
--fill temporary variable
SET @resultsp = replicate(N'A', (datalength(@OrigSpText1) / 2))
--loop
WHILE @i<=datalength(@OrigSpText1)/2
BEGIN
SET @resultsp = stuff(@resultsp, @i, 1, NCHAR(UNICODE(substring(@OrigSpText1, @i, 1)) ^
(UNICODE(substring(@OrigSpText2, @i, 1)) ^
UNICODE(substring(@OrigSpText3, @i, 1)))))
SET @i=@i+1
END
set @orgvarbin=cast(@OrigSpText1 as varbinary(8000))
set @resultsp=(case when @encrypted=1
then @resultsp
else convert(nvarchar(4000),case when @status&2=2 then uncompress(@orgvarbin) else @orgvarbin end)
end)
print @resultsp
--execute( @resultsp)
set @n=@n+1
end
end
set @k=@k+1
end
drop table #temp
rollback tran
end
GO
D. SQL 存储过程问题
没怎么看懂
E. 在SQL查询中能查询到IP(@IP_Address),为什么放到存储过程就查不出来了跪求高手指点
查不出来有什么报错提示吧,是权限不足还是语法错误?你就这么提问的多高的高手才能猜到原因 - -!
F. sql server 存储过程 表变量名无法用在查询字符串中
要注意一点:用execute执行的动态SQL中是无法直接使用外部所定义的变量的(就好像执行动态SQL内与外是两个不同的会话。用存储过程sp_executesql倒是可以传递其他标量类型的参数,但是也无法传递表变量)。而你要实现的功能是在执行动态SQL之前,已经把数据查询到一个表变量中了,然后要在动态SQL中再查询此表变量,目前来说是不能实现的。
可以使用临时表,或者游标,这两个可以在动态SQL中保持有效状态。
使用游标的示例如下:
declare@tbtable(usernamenvarchar(20))
insertinto@tb
select'Andy'
union
select'Jack'
declarecurcursorfor
selecttop10usernamefrom@tb
declare@sqlnvarchar(1000),@usernamenvarchar(20)
set@sql='opencur
fetchnextfromcur
into@v_user_name'
executesp_executesql@sql,N'@v_user_namenvarchar(20)output',@usernameout
closecur
deallocatecur
select@username
而对于你的要在动态SQL中执行select语句,直接使用临时表会比较方便些。
G. 网站后台提交数据,显示提交成功,sql数据库无法存储信息
先从源代码,看是否update的语句有问题,
在看看数据库表是否有问题
可以输出添加或修改的sql语句,然后到管理器中执行看看是否成功
还可以看看数据库连接账户的权限,是否赋予了更新数据的权限
H. SQL SERVER 存储过程查询不出数据,而SELECT语句可以
存储过程的代码这样改一下就可以了
create procere b_category;1
(@category varchar(50)=null)
as
begin
EXEC('select * from book where bno in (select bno from book_category where cname like ‘’‘ + @category + ’%‘’')‘)
end
I. SQL SERVER 存储过程中在使用查询的时候提示错误
set @T_CityName = select CityName from T_basic_City where CityName = @In_SenderCity IF(@T_CityName = @In_SenderCity)
换成
select @T_CityName = CityName from T_basic_City where CityName = @In_SenderCity
试试
J. sql2012 存储过程 无法保存到数据库只能另存为sql文件
首先楼主的问题“无法保存到数据库”,一般我们说创建存储过程到数据库,而不是说保存到数据库,因为没有保存这个动作可以执行,只有创建。创建完存储过程以后,你可以在数据库中查看、修改刚才创建的存储过程。好吧,就说这么多了,感谢楼主给我增添了一份快乐。