小编KM.*_*KM.的帖子

SQL Server如何从列中删除标识

有没有一种简单的方法从SQL Server 2005中的表中删除标识?

当我使用Management Studio时,它会生成一个脚本,用于创建没有标识的镜像表,复制数据,删除表,然后重命名镜像表等.此脚本中有5231行,因为此表/列有许多FK关系.

运行一个简单的改变/丢弃让我感觉更舒服.有任何想法吗?

编辑
我想我将使用企业管理器中的5,231行脚本.但是,我打算将它分解成更小的部分,我可以更好地运行和控制.这个表"行为"很奇怪,如果你试图删除1行(即使你刚插入一行,这不在任何其他FK表中),你会收到这个错误:

delete MyTable where MyPrimaryKey=1234  

Msg 8621, Level 17, State 2, Line 1
    The query processor ran out of stack space during query optimization. Please simplify the query.
Run Code Online (Sandbox Code Playgroud)

毫无疑问,所有的FK.当我们进行这些架构和相关的应用程序更改时,我们将暂停对应用程序的所有访问并以单用户模式运行.但是,我们需要快速运行,我需要知道需要多长时间.我想我只需要测试,测试,测试.

sql-server sql-server-2005

20
推荐指数
3
解决办法
2万
查看次数

如何创建包含colspans的固定表头行?

我有一个从数据库数据创建的大型动态表.我需要列标题行保持固定并滚动必要的行.

我在网上试过很多脚本试图让它正常工作.我想在浏览器上保持简单易用,因为一些目标计算机相当蹩脚.

这是我正在使用的:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
    <title>Sample</title>
  </head>

  <body>
    <br><br><br><br>

    <table id="A" border="0" width="95%" cellspacing="0" cellpadding="0" align="center" class="base">
      <tr bgcolor='gray'>
        <td>
          <br><br><br>
          need the blue column heading rows to remain fixed, and scroll the green rows:<br>

    <table id="XYZ" border="1" width="625" cellspacing="0" cellpadding="0" align="center" class="base">
      <thead>

        <tr>
          <th width="50px" bgcolor="DeepSkyBlue" align="center" valign="middle">Col 1a</th>
          <th width="50px" bgcolor="DeepSkyBlue" align="center" valign="middle">Col 1b</th>
          <th width="75px" bgcolor="DeepSkyBlue" align="center" valign="middle">Col 1c</th>
          <th width="100px" style="border-left:medium solid black;" colspan="3" bgcolor="DeepSkyBlue" align="center" valign="middle"><b>Col 2</th> …
Run Code Online (Sandbox Code Playgroud)

javascript css jquery html-table

20
推荐指数
4
解决办法
2万
查看次数

Oracle,Postgres和SQL Server中的字符串连接运算符

有没有办法在Oracle,Postgres和SQL Server中使用通用运算符进行连接.

在Oracle中我们使用'|',postgres使用'||' 和sql server使用'+'.

我通过添加自定义运算符'+'来支持字符串连接,从而解决了postgres中的问题.

有没有办法在Oracle中添加相同的运算符以支持使用'+'运算符进行字符串连接.

database sql-server oracle postgresql

16
推荐指数
3
解决办法
2万
查看次数

FOR XML PATH(''):转义"特殊"字符

此代码基本上将基于一个字符串中的位置的字符转换为另一个字符串中相同位置的字符,并且它针对表中的所有行运行.

当我运行它(简化版)时:

DECLARE @R           char(40)
DECLARE @U           char(40)
SET @R=' abcdefghijklmnopqrstuvwxyz!@#$%^&*()_+'+char(181)
SET @U=REVERSE(@R)

DECLARE @TestTable TABLE (RowID int identity(1,1) primary key, Unreadable  varchar(500))
INSERT INTO @TestTable VALUES ('+µt$zw!*µsu+yt!+s$xy')
INSERT INTO @TestTable VALUES ('%*!!xµpxu!(')
INSERT INTO @TestTable VALUES ('pxpµnxrµu+yµs%$t')


    ;WITH CodeValues AS
    (
    SELECT
        Number,SUBSTRING(@R,Number,1) AS R,ASCII(SUBSTRING(@U,Number,1)) AS UA
        FROM Numbers
        WHERE Number<=LEN(@R)
    )
    SELECT
        t.RowID
            ,(SELECT
                  ''+c.R
                  FROM Numbers               n
                      INNER JOIN CodeValues  c ON ASCII(SUBSTRING(t.Unreadable,n.Number,1))=c.UA
                  WHERE n.Number<=LEN(t.Unreadable) 
                  FOR XML PATH('') 
             ) AS readable
        FROM @TestTable t
Run Code Online (Sandbox Code Playgroud)

我得到以下内容:

RowID       readable …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server sql-server-2005 for-xml-path

15
推荐指数
1
解决办法
2万
查看次数

@@ ERROR和/或TRY - CATCH

Try-Catch会捕获@@ ERROR可以发现的所有错误吗?在下面的代码片段中,检查@@ ERROR是否值得?RETURN 1111会发生吗?

SET XACT_ABORT ON
BEGIN TRANSACTION

BEGIN TRY
    --do sql command here  <<<<<<<<<<<

    SELECT @Error=@@ERROR
    IF @Error!=0
    BEGIN
        IF XACT_STATE()!=0
        BEGIN
            ROLLBACK TRANSACTION
        END
        RETURN 1111
    END

END TRY
BEGIN CATCH

    IF XACT_STATE()!=0
    BEGIN
        ROLLBACK TRANSACTION
    END
    RETURN 2222

END CATCH

IF XACT_STATE()=1
BEGIN
    COMMIT
END

RETURN 0
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server sql-server-2005

15
推荐指数
2
解决办法
3万
查看次数

在PHP中混淆或加密一些纯文本数据

我需要在php 5.2应用程序中对一些纯文本数据进行模糊处理或加密.

我更喜欢一个输入字符串和输出字符串保持相同长度的解决方案.

这不需要非常强大,因为有许多其他安全层.强将是好的,但这将使程序员/ dba /支持人/等不会意外地从数据库中读取文本.

关键考虑因素

  • 编辑添加我更喜欢一个输入字符串和输出字符串保持相同长度的解决方案.
  • 只有字符串文本才会被混淆/加密以便存储在数据库中
  • php应用程序需要在数据库保存之前对数据进行模糊处理/加密,并且需要在数据库读取后取消模糊/解密
  • 这是对现有应用程序的修改
  • 只需要对某些列进行模糊/加密
  • 根据Type字段,只需要对某些行进行模糊处理/加密
  • 只需要处理几个加载/保存点
  • 已经为某些字段确定了最大列大小,但是对于其他字段没有确定,但我更喜欢在受限字段的现有大小范围内工作的解决方案
  • 编辑,添加密钥可能是一些主键信息+不可编辑字段的组合

这是一个示例数据库表和数据:

int           char(1) varchar(24)              int      date
MyPrimaryKey  RowType UserText                 UserNo   DateChange
------------  ------- ------------------------ -------- ----------------
1             N       nothing special here     43       6/20/2009 12:11am
2             N       same thing, wow!         78       6/23/2009 1:03pm
3             S       fBJKg}.jkjWfF78dlg@45kjg 43       6/25/2009 6:45am
4             N       same old, same old text  21       6/25/2009 8:11am
Run Code Online (Sandbox Code Playgroud)

应用程序将正常加载和显示行1,2和4.但是,它会有条件地(基于行类型)使用此混淆/加密和非混淆/解密逻辑来处理第3行中的文本.

任何人都可以提供混淆/加密和非混淆/解密功能代码,链接和/或指针,这将有所帮助吗?

谢谢!

编辑
我喜欢简单的base64编码理念,但有一种方法可以将数据保持在固定的大小.到目前为止列出的所有方法的输出值都大于输入值.对于某些列,这将是一个问题,用户可以输入50个字符并将其存储在varchar(50)列中.

php encryption obfuscation encoding

13
推荐指数
4
解决办法
2万
查看次数

如何使用sp_send_dbmail发送纯文本电子邮件(带换行符)?

我有一个SQL Server 2008程序,通过sp_send_dbmail发送电子邮件.

我正在使用以下代码:

  set @bodyText = ( select 
                      N'Here is one line of text ' +
                      N'It would be nice to have this on a 2nd line ' +
                      N'Below is some data: ' +
                      N' ' +
                      N' ' +
                      field1 +
                      N' ' +
                      field2 +
                      N' ' +
                      N'This is the last line'
                    from myTable )

    EXEC msdb.dbo.sp_send_dbmail
        @profile_name = 'myProfile',
        @recipients = @to,
        @body = @bodyText,
        @body_format = 'TEXT',
        @subject = 'Testing Email' ;
Run Code Online (Sandbox Code Playgroud)

我的myProfile设置为使用本地smtp服务器,这导致c:\ …

sql-server emacs sp-send-dbmail sql-server-2008

13
推荐指数
3
解决办法
4万
查看次数

转换和验证日期字符串的最佳方法

我在存储过程中有一个char(8)变量格式化为ddmmyyyy(此值的质量和有效性未知且超出我的控制范围).将值移动到datetime变量的最有效方法是什么,如果它不是有效的datetime则抛出错误.

DECLARE @Source       char(8)
DECLARE @Destination  datetime

SET @Source='07152009'

--your solution here


SELECT @Destination
Run Code Online (Sandbox Code Playgroud)

这是我能想到的最佳方式:

DECLARE @Source             char(8)
DECLARE @Temp               varchar(10)
DECLARE @Destination        datetime

set @Source='07152009'
SET @Temp=LEFT(@Source,2)+'/'+SUBSTRING(@Source,3,2)+'/'+RIGHT(@Source,4)

IF ISDATE(@Temp)!=1
BEGIN
    RAISERROR('ERROR, invalid date',16,1)
END
SET @Destination=@Temp

SELECT @Source AS Source, @Temp AS  Temp, @Destination AS Destination
Run Code Online (Sandbox Code Playgroud)

编辑这里是我要去的...

DECLARE @Source             char(8)
DECLARE @Destination        datetime

set @Source='07152009'
BEGIN TRY
    SET @Destination=CONVERT(datetime,RIGHT(@Source,4)        -- YYYY
                                      +LEFT(@Source,2)        -- MM
                                      +SUBSTRING(@Source,3,2) -- DD
                             )
END TRY
BEGIN CATCH
    PRINT 'ERROR!!!' --I'll add a little …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server sql-server-2005

11
推荐指数
2
解决办法
2万
查看次数

如何选择列作为行?

所以,我一直在寻找,我发现了与我的问题相似的东西,但我需要更多的帮助来获得真正的解决方案.

我正在尝试构造一个返回2列数据的查询,第一列应该是列名本身的列表,第二列应该是该列的值.

在视觉上它看起来像这样

Column1      Column2
-------      -------
columnA      value_of_columnA
columnB      value_of_columnB
...          ...
Run Code Online (Sandbox Code Playgroud)

我很确定这需要动态SQL来实现,但我不知道如何开始创建查询.

任何帮助表示赞赏!

sql t-sql sql-server dynamic-sql

10
推荐指数
1
解决办法
3万
查看次数

任何隐藏的陷阱将列从varchar(8000)更改为varchar(max)?

我有很多(超过一千个地方)的遗留T-SQL代码只能在实用程序表中INSERTvarchar(8000)列中.我们的需求已经改变,现在该列需要能够处理更大的值.因此,我需要制作该专栏varchar(max).这只是一个普通的数据列,其中没有执行搜索,没有索引,只有一个过程读取它,它是INSERT忘记应用程序(几乎像一个日志条目).

我计划仅在几个实际生成较大数据的地方进行更改,并在处理此列的单个存储过程中进行更改.

  • 是否有任何隐藏的陷阱将列更改varchar(8000)varchar(max)
  • 将所有的T-SQL字符串函数的工作方式相同,LEN(),RTRIM(),SUBSTRING(),等.
  • 任何人都可以想象为什么我必须对认为列仍然存在的代码进行任何更改varchar(8000)

t-sql sql-server sql-server-2005

10
推荐指数
1
解决办法
769
查看次数